package xin.codedream.codelog.service;

import xin.codedream.codelog.exception.ArticleException;
import xin.codedream.codelog.model.entity.Article;

import java.util.List;

/**
 * 文章功能服务接口
 *
 * @author NGLSL
 * @date 2018/8/19
 */
public interface ArticleService {
    /**
     * 保存文章数据
     *
     * @param article 文章数据
     * @return boolean
     */
    boolean saveArticle(Article article);

    /**
     * 发布文章
     *
     * @param article 文章数据
     * @param tags    标签
     * @return boolean
     */
    boolean postArticle(Article article, String tags);

    /**
     * 通过文章标题查询该文章是否存在
     *
     * @param title 文章标题
     * @return Article
     */
    Article findArticleByTitle(String title);

    /**
     * 获取所有文章
     *
     * @param article 查询条件
     * @return List
     */
    List<Article> findAllArticle(Article article);

    /**
     * 通过文章ID查找文章
     *
     * @param articleId 文章标题
     * @return Article
     */
    Article findArticleByArticleId(Long articleId);

    /**
     * 更新文章信息
     *
     * @param article 文章数据
     * @return int
     */
    boolean updateArticleByArticleId(Article article);

    /**
     * 通过文章ID删除文章
     *
     * @param articleId 文章ID
     * @return boolean
     */
    boolean removeArticleByArticleId(Long articleId);

    /**
     * 删除文章以及相关数据
     *
     * @param article 文章数据
     * @return boolean
     * @throws ArticleException 文章异常
     */
    boolean removeArticleData(Article article) throws ArticleException;

    /**
     * 统计所有文章数量
     *
     * @return int
     */
    int countAllArticleQuantity();

    /**
     * 获取最近五篇文章
     *
     * @return List
     */
    List<Article> findFiveArticle();

    /**
     * 通过目录ID更新文章目录的关联
     *
     * @param cateId 目录ID
     * @param newCateId 新目录ID
     * @return boolean
     */
    boolean updateArticleCateByCateId( Long cateId, Long newCateId);
}
